home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 25 / CU Amiga Magazine's Super CD-ROM 25 (1998)(EMAP Images)(GB)(Track 1 of 2)[!][issue 1998-08].iso / CUCD / Programming / Triton / Source / classes / slider.c < prev    next >
C/C++ Source or Header  |  1998-05-23  |  6KB  |  224 lines

  1. /*
  2.  *  OpenTriton -- A free release of the triton.library source code
  3.  *  Copyright (C) 1993-1998  Stefan Zeiger
  4.  *
  5.  *  This program is free software; you can redistribute it and/or modify
  6.  *  it under the terms of the GNU General Public License as published by
  7.  *  the Free Software Foundation; either version 2 of the License, or
  8.  *  (at your option) any later version.
  9.  *
  10.  *  This program is distributed in the hope that it will be useful,
  11.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.  *  GNU General Public License for more details.
  14.  *
  15.  *  You should have received a copy of the GNU General Public License
  16.  *  along with this program; if not, write to the Free Software
  17.  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18.  *
  19.  */
  20.  
  21.  
  22. /****** triton.library/class_Slider ******
  23. *
  24. *   NAME    
  25. *    class_Slider -- A GadTools slider gadget
  26. *
  27. *   SUPERCLASS
  28. *    class_DisplayObject
  29. *
  30. *   SYNOPSIS
  31. *    TROB_Slider
  32. *
  33. *   ATTRIBUTES
  34. *    <Default>        : ULONG flags
  35. *                       - TROF_HORIZ (default)
  36. *                       - TROF_VERT
  37. *                       [create]
  38. *    TRAT_Value       : WORD level
  39. *                       [create, set, get]
  40. *    TRSL_Min         : WORD min
  41. *                       [create]
  42. *    TRSL_Max         : WORD max
  43. *                       [create]
  44. *
  45. *   APPLICATION MESSAGES
  46. *    TRMS_NEWVALUE is sent when TRAT_Value changes. trm_Data contains
  47. *    the new value.
  48. *
  49. ******/
  50.  
  51.  
  52. /////////////////////////////////////////////////////////////////////////////////////////////////////////////
  53. //////////////////////////////////////////////////////////////////////////////////////// Include our stuff //
  54. /////////////////////////////////////////////////////////////////////////////////////////////////////////////
  55.  
  56. #define TR_THIS_IS_TRITON
  57.  
  58. #include <libraries/triton.h>
  59. #include <clib/triton_protos.h>
  60. #include "/internal.h"
  61. #include "slider.def"
  62.  
  63.  
  64. /////////////////////////////////////////////////////////////////////////////////////////////////////////////
  65. ////////////////////////////////////////////////////////////////////////////////////////////// Object data //
  66. /////////////////////////////////////////////////////////////////////////////////////////////////////////////
  67.  
  68. #define OBJECT (&(object->DO.O))
  69. #define DISPLAYOBJECT (&(object->DO))
  70. #define SLIDER object
  71.  
  72.  
  73. /////////////////////////////////////////////////////////////////////////////////////////////////////////////
  74. ////////////////////////////////////////////////////////////////////////////////////////////////// Methods //
  75. /////////////////////////////////////////////////////////////////////////////////////////////////////////////
  76.  
  77. TR_METHOD(Slider,NEW,NewData)
  78. {
  79.   if(!TRDP_DisplayObject_NEW(object,messageid,data,metaclass->trc_SuperClass)) return NULL;
  80.   data->project->trp_IDCMPFlags|=SLIDERIDCMP;
  81.  
  82.   DISPLAYOBJECT->MinHeight=max(CHECKBOX_HEIGHT,data->project->trp_TotalPropFontHeight);
  83.   DISPLAYOBJECT->MinWidth=((DISPLAYOBJECT->MinHeight*data->project->trp_AspectFixing)/16)+5;
  84.   if(SLIDER->Flags&TROF_VERT) DISPLAYOBJECT->YResize=TRUE;
  85.   else DISPLAYOBJECT->XResize=TRUE;
  86.  
  87.   return (ULONG)object;
  88. }
  89.  
  90.  
  91. TR_METHOD(Slider,INSTALL,InstallData)
  92. {
  93.   TRDP_DisplayObject_INSTALL(object,messageid,data,metaclass->trc_SuperClass);
  94.   TR_InternalAreaFill(OBJECT->Project,NULL,DISPLAYOBJECT->Left+2,DISPLAYOBJECT->Top+1,
  95.               DISPLAYOBJECT->Left+DISPLAYOBJECT->Width-3,
  96.               DISPLAYOBJECT->Top+DISPLAYOBJECT->Height-2,TRBF_NONE);
  97.   if(DISPLAYOBJECT->PrivData=(ULONG)
  98.      TR_CreateGadgetTags(OBJECT->Project,
  99.              OBJECT,
  100.              SLIDER_KIND,
  101.              DISPLAYOBJECT->Left,
  102.              DISPLAYOBJECT->Top,
  103.              DISPLAYOBJECT->Width,
  104.              DISPLAYOBJECT->Height,
  105.              GTSL_Level,          SLIDER->Value,
  106.              GTSL_Min,            SLIDER->Min,
  107.              GTSL_Max,            SLIDER->Max,
  108.              PGA_Freedom,         (SLIDER->Flags&TROF_VERT)?LORIENT_VERT:LORIENT_HORIZ,
  109.              GA_Disabled,         TR_DO_DISABLED,
  110.              TAG_END)) return 1;
  111.   else return 0;
  112. }
  113.  
  114.  
  115. TR_METHOD(Slider,SETATTRIBUTE,SetAttributeData)
  116. {
  117.   switch(data->attribute)
  118.     {
  119.     case TRAT_Value:
  120.       if(SLIDER->Value!=data->value)
  121.     {
  122.       SLIDER->Value=data->value;
  123.       if(DISPLAYOBJECT->Installed)
  124.         GT_SetGadgetAttrs((struct Gadget *)DISPLAYOBJECT->PrivData,
  125.                   OBJECT->Project->trp_Window,NULL,GTSL_Level,SLIDER->Value,
  126.                   GA_Disabled,TR_DO_DISABLED,TAG_END);
  127.     }
  128.       return 1;
  129.  
  130.     case TRSL_Min:
  131.       SLIDER->Min=data->value;
  132.       return 1;
  133.  
  134.     case TRSL_Max:
  135.       SLIDER->Max=data->value;
  136.       return 1;
  137.  
  138.     case 0:
  139.       SLIDER->Flags=data->value;
  140.       return 1;
  141.  
  142.     default:
  143.       return TRDP_DisplayObject_SETATTRIBUTE(object,messageid,data,metaclass->trc_SuperClass);
  144.     }
  145. }
  146.  
  147.  
  148. TR_SIMPLEMETHOD(Slider,GETATTRIBUTE)
  149. {
  150.   switch((ULONG)data)
  151.     {
  152.     case TRAT_Value:
  153.       return SLIDER->Value;
  154.     default:
  155.       return TRDP_DisplayObject_GETATTRIBUTE(object,messageid,data,metaclass->trc_SuperClass);
  156.     }
  157. }
  158.  
  159.  
  160. TR_SIMPLEMETHOD(Slider,DISABLED_ENABLED)
  161. {
  162.   GT_SetGadgetAttrs((struct Gadget *)DISPLAYOBJECT->PrivData,
  163.             OBJECT->Project->trp_Window,NULL,GTSL_Level,SLIDER->Value,
  164.             GA_Disabled,TR_DO_DISABLED,TAG_END);
  165.   return 1;
  166. }
  167.  
  168.  
  169. TR_METHOD(Slider,KEYDOWN_REPEATEDKEYDOWN,EventData)
  170. {
  171.   BOOL sendmsg=FALSE;
  172.   struct TR_Message *m;
  173.  
  174.   if(data->imsg->Code)
  175.     {
  176.       if(SLIDER->Value > SLIDER->Min)
  177.         {
  178.           SLIDER->Value--;
  179.           sendmsg=TRUE;
  180.         }
  181.     }
  182.   else
  183.     {
  184.       if(SLIDER->Value < SLIDER->Max)
  185.         {
  186.           SLIDER->Value++;
  187.           sendmsg=TRUE;
  188.         }
  189.     }
  190.  
  191.   if(sendmsg)
  192.     {
  193.       TR_SetAttribute(OBJECT->Project,DISPLAYOBJECT->ID,TRAT_Value,SLIDER->Value);
  194.       if(m=TR_CreateMsg(Self.DO.O.Project->trp_App))
  195.     {
  196.       m->trm_ID=DISPLAYOBJECT->ID;
  197.       m->trm_Class=TRMS_NEWVALUE;
  198.       m->trm_Data=SLIDER->Value;
  199.     }
  200.     }
  201.  
  202.   return TR_DIRECTMETHODCALL(Slider,DISABLED_ENABLED);
  203. }
  204.  
  205.  
  206. TR_METHOD(Slider,EVENT,EventData)
  207. {
  208.   struct TR_Message *m;
  209.  
  210.   if((data->imsg->Class==IDCMP_MOUSEMOVE)&&(data->imsg->IAddress==(APTR)(DISPLAYOBJECT->PrivData)))
  211.     {
  212.       SLIDER->Value=data->imsg->Code;
  213.       if(m=TR_CreateMsg(Self.DO.O.Project->trp_App))
  214.     {
  215.       m->trm_ID=DISPLAYOBJECT->ID;
  216.       m->trm_Class=TRMS_NEWVALUE;
  217.       m->trm_Data=SLIDER->Value;
  218.     }
  219.       TR_SetAttribute(OBJECT->Project,DISPLAYOBJECT->ID,TRAT_Value,SLIDER->Value);
  220.       return 1L;
  221.     }
  222.   else return 0;
  223. }
  224.